// Timer.h
#include <string>
#include <chrono>
#include <iostream>

using namespace std;
using namespace std::chrono;

// 头文件：一些别人已经写好的，我们 include 进来就能直接用的东西
// C++ 标准库的头文件都没有后缀
// 但是我们自己的写的头文件，必须加上 .h/.hpp 后缀
// 包含标准库的头文件的时候，#include <xxxx>
// 包含自己写的头文件的时候，#include "xxxx.h"

// 创建一个用于统计算法执行时间的工具
class Timer {
public: // Timer 开放给外部可用的内容
  // 构造函数：它必须初始化自己的所有属性
  // 用来创建 Timer 的函数
  Timer(string str) {
    name = str;
    cout<<"Timer 已创建，开始计时"<<endl;
    start = high_resolution_clock::now();
    end = high_resolution_clock::now();
  }
  // 析构函数
  // Timer 被销毁的时候自动调用的函数
  ~Timer() {
    cout<<"Time 已销毁，停止计时"<<endl;
    end = high_resolution_clock::now();

    // end - start
    // 把两个时间点的差值转换成特定单位的时间间隔
    auto n = duration_cast<nanoseconds>(end - start);
    // 把时间间隔转换成数字
    cout<<"共计："<<n.count()<<" 纳秒."<<endl;
    cout<<name<<endl;
  }

private:
  string name;
  // 只开放给 Timer 自己使用的内容
  // 起始时间点
  // high_resolution_clock 高精度时钟
  time_point<high_resolution_clock> start;
  // 结束时间点
  time_point<high_resolution_clock> end;
};
